import { getCartList, removeCart } from '../../apis/cart'
Page({
  data: {
    isCheck: false, // 是否全选的标记
    list: [],
  },

  onShow() {
    // 获取购物车列表数据
    this.getCartList()
  },
  // 购物车列表数据
  async getCartList() {
    const res = await getCartList();
    if (res.status === 200) {
      const filteredList = res.data.result.map(item => {
        // 如果数量为零，将其设置为1
        if (item.num === 0) {
          item.num = 1; // 设置数量为1
        }
        item.totalPrice = (item.num * item.price).toFixed(1); // 更新总价格，保留一位小数
        item.isCheck = true; // 默认设置为选中状态
        return item;
      }).filter(item => item.price > 0); // 过滤价格大于零的商品
  
      // 检查是否所有项都被选中
      const isAllChecked = filteredList.every(item => item.isCheck);
  
      this.setData({
        list: filteredList,
        isCheck: isAllChecked, // 更新全选状态
      });
    }
  },

  // 加号
  async increaseQuantity(e) {
    const { id } = e.currentTarget.dataset;
    const updatedList = this.data.list.map(item => {
      if (item.id === id) {
        if (item.num === 0) {
          item.num = 1; // 如果数量为零，设置为1
        } else {
          item.num += 1; // 增加数量
        }
        item.totalPrice = (item.num * item.price).toFixed(1); // 更新总价格，保留一位小数
      }
      return item;
    });

    // 更新合计价格
    const total = updatedList.reduce((sum, item) => {
      return sum + (item.isCheck ? parseFloat(item.totalPrice) : 0);
    }, 0);

    this.setData({ list: updatedList, totalPrice: total.toFixed(1) });
  },

  // 减号
  async decreaseQuantity(e) {
    const { id } = e.currentTarget.dataset;
    const updatedList = this.data.list.map(item => {
      if (item.id === id) {
        if (item.num > 1) { // 确保数量不小于1
          item.num -= 1; // 减少数量
        }
        item.totalPrice = (item.num * item.price).toFixed(1); // 更新总价格，保留一位小数
      }
      return item;
    });

    // 更新合计价格
    const total = updatedList.reduce((sum, item) => {
      return sum + (item.isCheck ? parseFloat(item.totalPrice) : 0);
    }, 0);

    this.setData({ list: updatedList, totalPrice: total.toFixed(1) });
  },

  // 删除购物车
  async remove(e) {
    const { id } = e.currentTarget.dataset;
    const res = await removeCart(id);
    if (res.status === 200 && res.success) {
      // 成功时更新列表
      const updatedList = this.data.list.filter(item => item.id !== id);
      
      // 更新合计价格
      const total = updatedList.reduce((sum, item) => {
        return sum + (item.isCheck ? parseFloat(item.totalPrice || item.price * item.num) : 0);
      }, 0);
      
      this.setData({
        list: updatedList,
        totalPrice: total.toFixed(1) // 更新合计价格
      });
    } else {
      console.error('删除失败:', res.msg); // 打印错误信息
    }
  },
  // 点击选择按钮
  toggleCheck(e) {
    const index = e.currentTarget.dataset.index;
    const list = this.data.list;

    // 切换当前项的 isCheck 状态
    list[index].isCheck = !list[index].isCheck;

    // 检查是否全选
    const isCheck = list.every(item => item.isCheck);

    // 更新合计价格
    const total = list.reduce((sum, item) => {
      return sum + (item.isCheck ? parseFloat(item.totalPrice) : 0);
    }, 0);

    this.setData({
      list,
      isCheck,
      totalPrice: total.toFixed(1), // 更新合计价格
    });
  },

  // 全选功能
  toggleAllCheck() {
    const isCheck = !this.data.isCheck;
    const list = this.data.list.map(item => ({
      ...item,
      isCheck,
    }));

    // 更新合计价格
    const total = list.reduce((sum, item) => {
      return sum + (isCheck ? parseFloat(item.totalPrice) : 0);
    }, 0);

    this.setData({
      list,
      isCheck,
      totalPrice: total.toFixed(1), // 更新合计价格
    });
  },

  // 触摸开始事件
  touchStart(e) {
    const { index } = e.currentTarget.dataset;
    this.setData({ startX: e.touches[0].pageX }); // 记录起始位置
    // 重置其他项的状态，确保一次只能滑动一个
    this.data.list.forEach((item, idx) => {
      if (idx !== index && item.isMoveDel) {
        item.isMoveDel = false;
      }
    });
    this.setData({ list: this.data.list });
  },

  // 滑动事件
  move(e) {
    const { index } = e.currentTarget.dataset;
    const touchEndX = e.touches[0].pageX; // 当前触摸点 X 坐标
    const diffX = this.data.startX - touchEndX; // 计算滑动距离
    const isLeftSwipe = diffX > 50; // 左滑大于 50 像素
    const isRightSwipe = diffX < -50; // 右滑大于 50 像素

    // 更新当前项状态
    if (isLeftSwipe || isRightSwipe) {
      this.data.list[index].isMoveDel = isLeftSwipe; // 左滑显示删除按钮
      this.setData({ list: this.data.list });
    }
  },

  deleteItem(e) {
    const { index } = e.currentTarget.dataset;
    const itemToDelete = this.data.list[index];
  
    // 调用 remove 方法进行删除
    this.remove({ currentTarget: { dataset: { id: itemToDelete.id } } });
    
    // 检查是否删除最后一项
    if (this.data.list.length === 1) {
      this.setData({ list: [] }); // 清空列表
    }
  }
});
